package threads;

public class Dusche {
  private double seife;
  private volatile Person drin;
  
  public Dusche(){
    drin=null;
    seife=0;
  }

  public Person getDrin(){
    return drin;
  }

  public synchronized boolean seifeDa(){return seife>0;}

  public synchronized void addSeife(Person wer, double s){
    seife=seife+s;
    System.out.println(wer+" hat "+s+" Seife nachgefüllt.");
    notifyAll();
  }

  public synchronized void belegen(Person p, int millis){
    drin=p;
    System.out.println(drin+" betritt die Dusche.");
    while(seife<=0){
      seife=0;
      try{
        System.out.println(drin+" raus aus Dusche; warte auf Seife.");
        drin=null;
        wait();
      } catch(InterruptedException ex){
        System.out.println("wait unterbrochen");
      }
    }
    drin=p;//die Person des Threads, die den Zuschlag bekommen hat
    drin.dasdauert("duschen", millis);
    seife=seife-Math.abs(millis);
    System.out.println(drin+" verlässt die Dusche.");
    drin=null;
  }
}
